﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SCIE_DTL;
using System.Data;
using System.Data.SqlClient;

namespace SCIE_DAL
{
    /// <summary>
    /// Criada em:
    /// Por:
    /// Descrição:
    /// </summary>
    public class NotebookDAO : EquipamentoDAO<NotebookDTO>
    {
        #region Atributos
        string nomeTabela;
        #endregion

        #region Metodos
        internal override IDbCommand CriarComandoBuscarTodos()
        {
            return factory.CreateCommand("SELECT * FROM " + ObterNomeTabela() + "");
        }
        #endregion

        #region Metodos Abstratos
        internal override IDbCommand CriarComandoInsercao(ITransferenciaDados dto)
        {
            //string sqlInsert = "INSERT INTO " + ObterNomeTabela() + "VALUES
            throw new NotImplementedException();
        }

        internal override string ObterNomeTabela()
        {
            nomeTabela = "dbo.NOTEBOOK n, dbo.EQUIPAMENTO e";
            return nomeTabela;
        }

        internal override IDbCommand CriarComandoAtualizacao(string etiqueta, NotebookDTO newDto)
        {
            string sqlUpdate = "UPDATE " + ObterNomeTabela() + " SET "
            + "'" + newDto.Software + "'"
            + ","
            + "'" + newDto.SaidaVideo + "' "
            + ","
            + "'" + newDto.NumSerie + "'"
            + ","
            + "'" + newDto.NumLicenca + "'"
            + ","
            + "'" + newDto.Midia + "'"
            + ","
            + "'" + newDto.Etiqueta + "'"
            + ","
            + "'" + newDto.EntradaPcmcia + "'"
            + ","
            + "'" + newDto.EntradaCartao + "'"
            + ","
            + "'" + newDto.Adaptador + "'"
            + ","
            + "'" + newDto.Bateria + "'"
            + ","
            + "'" + newDto.Berco + "'"
            + ","
            + "'" + newDto.DataBaixa + "'"
            + ","
            + "'" + newDto.DataEntrada + "'"
            + ","
            + "'" + newDto.SaidaVideo + "'"
            + ","
            + "'" + newDto.Sala + "'"
            + ","
            + "'" + newDto.Status + "'"
            + ","
            + "'" + newDto.Teclado + "'"
            + ","
            + "'" + newDto.WebCam + "'"
            + "," + newDto.HD + "," + newDto.EntradaUsb
            + "," + newDto.PlacaRede + "," + newDto.PlacaMae + "," + newDto.Memoria;
            return factory.CreateCommand(sqlUpdate);
        }

        internal override IDbCommand CriarComandoRemocao(string etiqueta)
        {
            string sql = "DELETE " + ObterNomeTabela() + " WHERE ETIQUETA = '" + etiqueta + "';";
            return factory.CreateCommand(sql);
        }

        internal override IDbCommand CriarComandoRemocao(NotebookDTO dto)
        {
            string sql = "DELETE " + ObterNomeTabela() + " WHERE ETIQUETA = '" + dto.Etiqueta + "';";
            return factory.CreateCommand(sql);
        }

        internal override IDbCommand CriarComandoBuscaEquipamentoPorEtiqueta(string etiqueta)
        {
            return factory.CreateCommand("SELECT * FROM " + ObterNomeTabela() + " WHERE e.ETIQUETA = '" + etiqueta + "' AND n.ETIQUETA = '" + etiqueta + "'");
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="coluna"></param>
        /// <param name="vColuna"></param>
        /// <returns></returns>
        internal IDbCommand CriarComandoBuscarEquipamentoPorColuna(string coluna, string vColuna)
        {
            return factory.CreateCommand("SELECT * FROM " + ObterNomeTabela() + "WHERE e.Etiqueta  = n.Etiqueta and " + coluna + " = " + vColuna + "");
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="coluna"></param>
        /// <param name="vColuna"></param>
        /// <returns></returns>
        public List<NotebookDTO> BuscarEquipamentoPorColuna(string coluna, string vColuna)
        {
            IDbCommand comando = CriarComandoBuscarEquipamentoPorColuna(coluna, vColuna);
            try
            {
                comando.Connection.Open();
                IDataReader leitor = comando.ExecuteReader();
                List<NotebookDTO> resultado = new List<NotebookDTO>();
                if (leitor.Read())
                {
                    NotebookDTO note = new NotebookDTO();
                    PopularDto(leitor, note);
                    resultado.Add(note);
                }

                return resultado;
            }
            finally
            {
                comando.Dispose();
            }
        }
        #endregion

        #region Popular Dto

        internal override void PopularDto(IDataReader leitor, NotebookDTO equipamento)
        {
            NotebookDTO notebook = new NotebookDTO();
            notebook.Etiqueta = (string)leitor["ETIQUETA"];
            notebook.Adaptador = (string)leitor["ADAPTADOR"];
            notebook.Berco = (string)leitor["BERCO"];
            notebook.EntradaUsb = (int)leitor["ENTRADAUSB"];
            notebook.EntradaPcmcia = (string)leitor["ENTRADA_PCMCIA"];
            notebook.EntradaCartao = (string)leitor["ENTRADA_CARTAO"];
            notebook.WebCam = (string)leitor["WEBCAM"];
            notebook.Bateria = (string)leitor["BATERIA"];
            notebook.NumLicenca = (string)leitor["NUM_LICENCA"];
            notebook.NumSerie = (string)leitor["NUM_SERIE"];
            notebook.HD = (int)leitor["HD"];
            notebook.PlacaMae = (int)leitor["PLACA_MAE"];
            notebook.PlacaRede = (int)leitor["PLACA_REDE"];
            notebook.Memoria = (int)leitor["MEMORIA"];
            notebook.Software = (int)leitor["SOFTWARE"];
        }
        #endregion
    }
}
